\documentclass[a4paper]{article}
\usepackage[affil-it]{authblk}
% \usepackage[backend=bibtex,style=numeric]{biblatex}
\usepackage[UTF8]{ctex}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{geometry}
\usepackage{graphicx}
\geometry{margin=1.5cm, vmargin={0pt,1cm}}
\setlength{\topmargin}{-1cm}
\setlength{\paperheight}{29.7cm}
\setlength{\textheight}{25.3cm}

\begin{document}
% ==================================================
\title{数值分析编程作业报告2}

\author{金郁香 3220103054
  \thanks{电子邮箱: \texttt{2621201771@qq.com}}}
\affil{浙江大学 信计2201班}

\date{截止时间: \today}

\maketitle

% ============================================
\section*{A. 实现牛顿插值、埃尔米特插值和贝塞尔曲线插值的C++程序}

\subsection*{牛顿插值类（NewtonInterpolation）}
\begin{itemize}
    \item \textbf{功能：} 实现牛顿插值算法，通过给定的数据点集计算插值多项式，并在任意点评估该多项式（即可以返回在任意点的预测值）。
    \item \textbf{主要成员函数：} 
    \begin{itemize}
        \item \texttt{newtonInterpolation}：输入给定的数据点集，计算并返回在给定点 \( x \) 处的插值结果。
    \end{itemize}
    \item \textbf{算法流程：}
    \begin{enumerate}
        \item 构建差商表：通过给定的数据点按公式计算差商。
        \item 计算插值多项式：使用差商表和牛顿差商公式计算插值多项式在任意点 \( x \) 的值。
    \end{enumerate}
\end{itemize}

\subsection*{埃尔米特插值类（HermiteInterpolation）}
\begin{itemize}
    \item \textbf{功能：} 实现埃尔米特插值算法，通过给定的数据点及其导数（只考虑二阶导数）计算插值多项式，并在任意点评估该多项式（即可以返回在任意点的预测值）。
    \item \textbf{主要成员函数：} 
    \begin{itemize}
        \item \texttt{hermiteInterpolation}输入给定的数据点集及其导数，计算并返回在给定点 \( x \) 处的位置和速度（即函数值和导数值）。
    \end{itemize}
    \item \textbf{算法流程：}
    \begin{enumerate}
        \item 构建差商表：类似于牛顿插值，但包括数据点处的二阶导数值（利用Hermite插值法的公式）。
        \item 计算插值多项式及其导数：使用差商表计算插值多项式，并求导得到插值多项式的导数，以预测位置和速度（即函数值和导数值）。
    \end{enumerate}
\end{itemize}

\subsection*{贝塞尔曲线插值类（BezierCurve）}
\begin{itemize}
    \item \textbf{功能：} 实现贝塞尔曲线插值，通过给定的控制点计算贝塞尔曲线，并在任意点评估曲线。
    \item \textbf{主要成员函数：} 
    \begin{itemize}
        \item \texttt{calculateBezierControlPoints}：根据给定的函数和区间计算贝塞尔曲线的控制点。
        \item \texttt{evaluateBezier}：在给定的参数 \( t \) 处评估贝塞尔曲线。
        \item \texttt{approximateWithBezierCurves}：使用贝塞尔曲线近似给定的函数，并绘制结果。
    \end{itemize}
    \item \textbf{算法流程：}
    \begin{enumerate}
        \item 计算控制点：根据给定的函数和区间计算贝塞尔曲线的控制点（即利用算法2.74中的公式，输入\( p_i \)、\( p_{i+1} \)，输出\( q_0 \)、\( q_1 \)、\( q_2 \)、\( q_3 \) ）。
        \item 评估贝塞尔曲线：使用控制点和贝塞尔曲线公式在任意点评估曲线（即可以返回在任意t处的曲线点）。
        \item 绘制贝塞尔曲线：将贝塞尔曲线分段绘制在图表上，展示曲线的形状。
    \end{enumerate}
\end{itemize}
\section*{B. 使用给定的函数和区间测试牛顿插值程序}

我们选择了函数 \(f(x) = \frac{1}{1+x^2}\) 在区间 \([-5,5]\) 上进行测试，并使用不同的节点数 \(n=2,4,6,8\) 来观察龙格现象。结果表明，随着节点数的增加，插值多项式在区间端点附近出现了较大的振荡，这是荣格现象的典型特征。

% 插入图片
\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.4\textwidth]{figure/PB_1.png}
    \caption{n=2 时的牛顿插值}
    \label{fig:PB_1}
\end{figure}

\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.4\textwidth]{figure/PB_2.png}
    \caption{n=4 时的牛顿插值}
    \label{fig:PB_2}
\end{figure}

\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.4\textwidth]{figure/PB_3.png}
    \caption{n=6 时的牛顿插值}
    \label{fig:PB_3}
\end{figure}

\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.4\textwidth]{figure/PB_4.png}
    \caption{n=8 时的牛顿插值}
    \label{fig:PB_4}
\end{figure}
\clearpage

\section*{C. 使用切比雪夫节点实现牛顿插值}

对于函数 \(f(x) = \frac{1}{1+25x^2}\)，我们在区间 \([-1,1]\) 上使用切比雪夫多项式的零点作为插值节点，并选择了 \(n=5,10,15,20\)。实验结果表明，与普通牛顿插值相比，使用切比雪夫节点的牛顿插值能够更好地逼近真实函数，且n较大时没有出现明显的振荡。

% 插入图片
\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.4\textwidth]{figure/PC_1.png}
    \caption{n=5 时的切比雪夫-牛顿插值}
    \label{fig:PC_1}
\end{figure}

\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.4\textwidth]{figure/PC_2.png}
    \caption{n=10 时的切比雪夫-牛顿插值}
    \label{fig:PC_2}
\end{figure}

\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.4\textwidth]{figure/PC_3.png}
    \caption{n=15 时的切比雪夫-牛顿插值}
    \label{fig:PC_3}
\end{figure}

\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.4\textwidth]{figure/PC_4.png}
    \caption{n=20 时的切比雪夫-牛顿插值}
    \label{fig:PC_4}
\end{figure}
\clearpage

\section*{D. 使用埃尔米特多项式预测汽车位置和速度}

给定一系列时间点、位移和速度数据，我们使用埃尔米特插值方法预测了汽车在 \(t=10\) 秒的位置和速度。结果表明，汽车在 \(t=10\) 秒的位置和速度分别为 \(x= 742.503 \) 英尺 和 \(v= 48.3817\) 英尺每秒。我们还使用埃尔米特多项式的导数来确定汽车是否超过速度限制 \(81\) 英尺每秒, 结果表明, 汽车会超过这一速度限制，且第一次检测到超速在 \(t=1.2\) 秒。

\section*{E. 使用牛顿公式近似幼虫体重曲线}

我们使用牛顿插值公式来近似两组幼虫样本的平均体重曲线。通过在关键时间点计算插值多项式的值，我们得到了两条体重曲线。同时，预测结果显示在接下来的 \(15\) 天后，第一组幼虫的体重将变为 \(14640.3\)，第二组幼虫的体重将变为 \(2981.48\)，所以两组幼虫都不会死亡。

\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.4\textwidth]{figure/PE.png}
    \caption{第0到28天两组幼虫样本的平均体重变化曲线}
    \label{fig:PE}
\end{figure}
\clearpage

\section*{F. 使用贝塞尔曲线近似心形曲线}

我们首先通过已知的心形曲线方程 \(x^2 + \left(\frac{3}{2}y - \sqrt{|x|}\right)^2 = 3\)，得到了曲线上数据点的参数方程；\(x=x(t),y=y(t),t\in[0,1]\)。然后使用贝塞尔曲线来近似该参数方程所代表的曲线。选择了 \(m=10, 40, 160\) 三个不同的节点数，分别生成了三组贝塞尔曲线来逼近心形曲线。结果显示，随着节点数的增加，贝塞尔曲线对心形曲线的逼近效果越来越好。

% 插入图片
\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.4\textwidth]{figure/PF_1.png}
    \caption{m=10 时的贝塞尔曲线近似}
    \label{fig:PF_1}
\end{figure}

\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.4\textwidth]{figure/PF_2.png}
    \caption{m=40 时的贝塞尔曲线近似}
    \label{fig:PF_2}
\end{figure}

\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.4\textwidth]{figure/PF_3.png}
    \caption{m=160 时的贝塞尔曲线近似}
    \label{fig:PF_3}
\end{figure}

\clearpage

% ===============================================

\end{document}